//问题1（L32）(未解决）
//问题2（L105)（已解决）
//问题3（L43)(未解决)
package com.example.connectservice;

import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.support.annotation.IntDef;

import java.util.List;

public class MyService extends Service {
    private boolean running = false;
    private String data="Default Message";
    public MyService() {
    }

    //=======================================================================
    //通过这两个方法就可以将MyService和MainActivity联系起来
    //如何联系起来呢？
    //public void onServiceConnected(ComponentName componentName, IBinder iBinder)
    //这一方法中的            IBinder iBinder
    //就可以访问的到了。
    //因为IBinder iBinder这里返回的是public IBinder onBind(Intent intent) {
    //    return new Binder();
    //}
    //的返回值，也就是
    //public class Binder extends android.os.Binder中的实例

    //问题1：return一个new Binder能够起什么用(个人推论在MainActivitye的第58行)
    @Override
    public IBinder onBind(Intent intent) {
        return new Binder();
    }

    public class Binder extends android.os.Binder{
        public void setData(String data){
            //此步就做到了  ==信息的同步==
            MyService.this.data = data;
        }
        //问题3：这个方法有什么卵用？（个人推论在MainActivity的第63行）
        public MyService getService(){
            return MyService.this;
        }
    }
    //=======================================================================







    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        data = intent.getStringExtra("data");
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onCreate() {
        super.onCreate();
        running = true;
        new Thread(){
            @Override
            public void run() {
                super.run();

                int i=0;

                while (running){
                    i++;
                    String str = i+":"+data;
                    System.out.println(i+":"+data);
                    //不等于空（null）即存在回调机制
                    if(callBack!=null){
                        callBack.onDataChange(str);
                    }
                    try {
                        sleep(1000);
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
            }
        }.start();
    }


    @Override
    public void onDestroy() {
        super.onDestroy();
        running = false;
    }

    private CallBack callBack = null;


    public void setCallBack(CallBack callBack) {
        this.callBack = callBack;
    }

    //问题2：接口的好处在哪里（先上网查）
    public static interface CallBack{
        void onDataChange(String data);
    }
}
